import { deepTree } from "@/utils"
// 假的 menus 数据
// import mockMenus from "@/utils/menus"
import { login, logout, getUserInfo } from "@/api/user"
import store2 from "store2"
import router from "@/router"

export default {
  namespaced: true,

  state: {
    isAdd: false, // 用户是否有动态添加的路由
    token: store2.get("token") || "", // 用户token
    info: null, // 用户信息
    menus: [],//用户有权限的菜单数据
    /**
     *  用户有权限的路由路径集合
     *  ['/dashboard/console']
     */
    routes: [],
    /**
     *  用户有权限的按钮权限标识集合
     *    ['base:sys:user:add','base:sys:user:delete']
     */
    permissions: [],
  },

  mutations: {
    setIsAdd(state, payload) {
      state.isAdd = payload
    },
    setToken(state, payload) {
      state.token = payload
      store2.set("token", payload)

    },
    setInfo(state, payload) {
      state.info = payload
    },
    setMenus(state, payload) {
      state.menus = payload

    },
    setRoutes(state, payload) {
      state.routes = payload
    },
    setPermissions(state, payload) {
      state.permissions = payload
    }
  },

  actions: {
    /**
     * 登录动作
     */
    async login({ commit }, payload) {
      const data = await login(payload)
      // 1. 将 data.token 写入 store
      commit("setToken", data.token)
      // store2.set("token", data.token)

      return data;
    },
    /**
     * 登出动作
     */
    async logout({ commit }, flag = true) {
      // 如果 token 已失效，不再请求接口
      if (flag && store2.get("token")) {
        try {
          flag && await logout();
        } catch (e) {
          // 忽略接口异常
        }
      }
      commit("setIsAdd", false);
      store2.clearAll();
      router.replace("/login");
    },
    /**
  * 获取用户信息动作
  */
    async getPerson({ commit }) {
      const data = await getUserInfo()
      // 1. 将用户信息写入 store
      commit("setInfo", data.info)
      // 一个假数据
      // data.menus = mockMenus
      // 2. 过滤掉type = 2 的按钮菜单
      const list = data.menus.filter((item) => item.type !== 2)
      commit("setMenus", deepTree(list))
      //过滤出type = 1 的 具有 router字段的数据
      const router = data.menus.filter(item => item.type === 1).map(item => item.router)
      // console.log('router', router)
      commit("setRoutes", router)

      // 过滤出type = 2 的 映射出perms字段，做一个数组扁平化
      const perms = data.menus.filter(item => item.type === 2).map(item => item.perms.split(',')).flat()
      // console.log('perms', perms)
      commit("setPermissions", perms)

      // 3. 返回数据
      return data.menus.filter((item) => item.type === 1)
    }
  },
}